home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / comm / tcp / Socks5.lha / Socks5 / src / include / threads.h < prev   
C/C++ Source or Header  |  1999-03-10  |  3KB  |  129 lines

  1. /* Copyright (c) 1995-1999 NEC USA, Inc.  All rights reserved.               */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6.  
  7. /*
  8.  * $Id: threads.h,v 1.13.2.2.2.7 1999/02/23 16:52:45 wlu Exp $
  9.  */
  10.  
  11. #ifndef MUTEX_H
  12. #define MUTEX_H
  13.  
  14. #ifdef IN_LIBRARY
  15. #undef USE_THREADS
  16. #endif
  17.  
  18. #ifdef USE_THREADS
  19. #ifdef HAVE_PTHREAD_H
  20.  
  21. #if defined(_OSF_SOURCE) && defined(HAVE_PTHREAD_ATTR_INIT)
  22. #define _PTHREAD_ENV_CXX
  23. #endif
  24.  
  25. #if defined(_HPUX_SOURCE) && !defined(_DECTHREADS_)
  26. #ifdef HAVE_PTHREAD_KILL
  27. #define HAVE_PTHREAD_CREATE
  28. #define HAVE_PTHREAD_ATTR_INIT
  29. #endif
  30. #endif
  31.  
  32. #include <pthread.h>
  33.  
  34. typedef pthread_mutex_t MUTEX_T;
  35. typedef pthread_attr_t  ATTR_T;
  36. typedef pthread_t       THREAD_T;
  37.  
  38. /* A good guess at the default mutex initializer...                          */
  39. #ifndef PTHREAD_MUTEX_INITIALIZER
  40. #define PTHREAD_MUTEX_INITIALIZER { 0 } 
  41. #endif
  42.  
  43. #ifdef HAVE_PTHREAD_ATTR_INIT
  44. #define THREAD_ATTR_INIT(x)   pthread_attr_init(&(x))
  45. #define THREAD_ATTR_SETSTACKSIZE(x,y)
  46. #elif defined(_DECTHREADS_) && !defined(HAVE_PTHREAD_ATTR_INIT)
  47. #define THREAD_ATTR_INIT(x)   pthread_attr_create(&(x))
  48. #define THREAD_ATTR_SETSTACKSIZE(x,y) pthread_attr_setstacksize(x,y)
  49. #else
  50. #define THREAD_ATTR_INIT(x)
  51. #define THREAD_ATTR_SETSTACKSIZE(x,y)
  52. #endif
  53. #ifdef HAVE_PTHREAD_ATTR_SCOPE
  54. #define THREAD_ATTR_SETSCOPE(x, y)   pthread_attr_setscope(&(x), y)
  55. #else
  56. #define THREAD_ATTR_SETSCOPE(x,y)
  57. #endif
  58. #ifdef HAVE_PTHREAD_ATTR_SETDETACHSTATE
  59. #define THREAD_ATTR_SETDETACHSTATE(x, y)   pthread_attr_setdetachstate(&(x), y)
  60. #else
  61. #define THREAD_ATTR_SETDETACHSTATE(x,y)
  62. #endif
  63.  
  64. #ifdef HAVE_PTHREAD_SIGMASK
  65. #define THREAD_SIGMASK(x, y, z)   pthread_sigmask(x, &(y), &(z))
  66. #elif defined(_AIX)
  67. #define THREAD_SIGMASK(x, y, z)   sigthreadmask(x, &(y), &(z))
  68. #else
  69. #define THREAD_SIGMASK(x, y, z)
  70. #endif
  71.  
  72. #ifdef HAVE_PTHREAD_KILL
  73. #define THREAD_KILL(x, y)         pthread_kill(x,y)
  74. #else
  75. #define THREAD_KILL(x,y)          -1
  76. #endif
  77.  
  78. #if !defined(_DECTHREADS_) || defined(HAVE_PTHREAD_ATTR_INIT)
  79. #define MUTEX_SETUP(x)
  80. #else
  81. #define MUTEX_SETUP(x)    pthread_mutex_init(&(x), pthread_mutexattr_default)
  82. #endif
  83.  
  84. #define MUTEX_LOCK(x)     pthread_mutex_lock(&(x))
  85. #define MUTEX_UNLOCK(x)   pthread_mutex_unlock(&(x))
  86. #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
  87.  
  88. #if !defined(_DECTHREADS_) || defined(HAVE_PTHREAD_ATTR_INIT)
  89. #define THREAD_CREATE(x,y,z,w) pthread_create(x,&(y),z,w)
  90. #define THREAD_DETACH(x)  pthread_detach(x)
  91. #else
  92. #define THREAD_CREATE(x,y,z,w) pthread_create(x,y,z,w)
  93. #define THREAD_DETACH(x)  pthread_detach(&x)
  94. #endif
  95.  
  96. #if defined(_DECTHREADS_) || defined(linux) || defined(_AIX) || defined(bsdi)
  97. #define THREAD_SELF()     0
  98. #else
  99. #define THREAD_SELF()     pthread_self()
  100. #endif
  101. #define THREAD_EXIT(x)    pthread_exit(NULL)
  102.  
  103. #else
  104. #undef  USE_THREADS
  105. #endif
  106. #endif
  107.  
  108. #ifdef USE_THREADS
  109. #define IFTHREADED(x)     x
  110. #else
  111.  
  112. typedef int MUTEX_T;
  113. #define MUTEX_INITIALIZER 0
  114.  
  115. #define MUTEX_LOCK(x)
  116. #define MUTEX_UNLOCK(x)
  117. #define IFTHREADED(x)     
  118.  
  119. #define THREAD_SELF()  0
  120. #define THREAD_EXIT(x) exit(x)
  121.  
  122.  
  123. #endif /* ! use threads */
  124. #endif /* ! mutex_h */
  125.  
  126.  
  127.  
  128.  
  129.